﻿#ifndef _ROUTETBL_H_
#define _ROUTETBL_H_

#include "nlist.h"
#include "ipaddr.h"
#include "netif.h"
#include "net_err.h"

// 路由表项结构
typedef struct _route_entry_t{
    ipaddr_t net; // 网络目标
    ipaddr_t mask; // 网络掩码
    ipaddr_t next_hop; // 网关,在链路上则为缺省值
    netif_t *netif; // 对应的网络接口
    nlist_node_t node;
    int mask_one_cnt; // 网络掩码中1的位数
}route_entry_t;

net_err_t routetbl_init();
net_err_t routetbl_add(ipaddr_t *net, ipaddr_t *mask, ipaddr_t *next_hop, netif_t *netif);
net_err_t routetbl_remove(ipaddr_t *net, ipaddr_t *mask);
route_entry_t * routetbl_find(const ipaddr_t *ip);

#endif